home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Compendium Deluxe 2
/
LSD and 17bit Compendium Deluxe - Volume II.iso
/
a
/
prog
/
misc
/
interfaces3_5.lha
/
Interfaces
/
LowLevel.mod
< prev
next >
Wrap
Text File
|
1994-03-05
|
9KB
|
290 lines
(*
(* Amiga Oberon Interface Module:
** $VER: LowLevel.mod 40.15 (28.12.93) Oberon 3.0
**
** (C) Copyright 1993 Commodore-Amiga, Inc.
** All Rights Reserved
**
** (C) Copyright Oberon Interface 1993 by hartmut Goebel
*) All Rights Reserved
*)
MODULE LowLevel;
IMPORT
e * := Exec,
Timer *,
u * := Utility,
SYSTEM;
CONST
lowlevelName * = "lowlevel.library";
TYPE
KeyQueryPtr * = UNTRACED POINTER TO KeyQuery;
(*****************************************************************************)
(* structure for use with QueryKeys() *)
KeyQuery * = STRUCT
keyCode * : INTEGER;
pressed * : e.BOOL;
END;
(*****************************************************************************)
CONST
(* bits in the return value of GetKey() *)
lShift * = 16;
rShift * = 17;
capsLock * = 18;
control * = 19;
lAlt * = 20;
rAlt * = 21;
lAmiga * = 22;
rAmiga * = 23;
(* bits in the return value of GetKey() for use with KeyDescription *)
kdLShift * = 0;
kdRShift * = 1;
kdCapsLock * = 2;
kdControl * = 3;
kdLAlt * = 4;
kdRAlt * = 5;
kdLAmiga * = 6;
kdRAmiga * = 7;
(*****************************************************************************)
(* Tags for SetJoyPortAttrs() *)
sjaDummy * = u.user+0C00100H;
sjaType * = sjaDummy+1; (* force type to mouse, joy, game cntrlr *)
sjaReinitialize * = sjaDummy+2; (* free potgo bits, reset to autosense *)
(* Controller types for SJA_Type tag *)
sjyTypeAutosense * = 0;
sjaTypeGameCtlr * = 1;
sjaTypeMouse * = 2;
sjaTypeJoystk * = 3;
(*****************************************************************************)
(* ReadJoyPort() return value definitions *)
(* Port types *)
typeNotAvail * = ASH(00,28); (* port data unavailable *)
typeGameCtlr * = ASH(01,28); (* port has game controller *)
typeGameCtrl * = ASH(01,28); (* synonym to avoid tippos *)
typeMouse * = ASH(02,28); (* port has mouse *)
typeJoystk * = ASH(03,28); (* port has joystick *)
typeUnknown * = ASH(04,28); (* port has unknown device *)
typeMask * = ASH(15,28); (* controller type *)
(* Button types, valid for all types except JP_TYPE_NOTAVAIL *)
buttonBlue * = 23; (* Blue - Stop; Right Mouse *)
buttonRed * = 22; (* Red - Select; Left Mouse; Joystick Fire *)
buttonYellow * = 21; (* Yellow - Repeat *)
buttonGreen * = 20; (* Green - Shuffle *)
buttonForward * = 19; (* Charcoal - Forward *)
buttonReverse * = 18; (* Charcoal - Reverse *)
buttonPlay * = 17; (* Grey - Play/Pause; Middle Mouse *)
buttonMask * = LONGSET{buttonBlue,buttonRed,buttonYellow,buttonGreen,
buttonForward,buttonReverse,buttonPlay};
(* Direction types, valid for JP_TYPE_GAMECTLR and JP_TYPE_JOYSTK *)
joyUp * = 3;
joyDown * = 2;
joyLeft * = 1;
joyRight * = 0;
directionMask * = LONGSET{joyUp,joyDown,joyLeft,joyRight};
(* Mouse position reports, valid for JP_TYPE_MOUSE *)
mHorzMask * = ASH(255,0); (* horizontal position *)
mVertMask * = ASH(255,8); (* vertical position *)
mouseMask * = mHorzMask + mVertMask;
(*****************************************************************************)
(* Tags for SystemControl() *)
sconDummy * = u.user+00C00000H;
sconTakeoversys * = sconDummy+0;
sconKillreq * = sconDummy+1;
sconCdreboot * = sconDummy+2;
sconStopinput * = sconDummy+3;
sconAddcreatekeys * = sconDummy+4;
sconRemcreatekeys * = sconDummy+5;
(* Reboot control values for use with SCON_CDReboot tag *)
cdRebootOn * = 1;
cdRebootOff * = 0;
cdRebootDefault * = 2;
(*****************************************************************************)
(* Rawkey codes returned when using SCON_AddCreateKeys with SystemControl() *)
port0ButtonBlue * = 072H;
port0ButtonRed * = 078H;
port0ButtonYellow * = 077H;
port0ButtonGreen * = 076H;
port0ButtonForward * = 075H;
port0ButtonReverse * = 074H;
port0ButtonPlay * = 073H;
port0JoyUp * = 079H;
port0JoyDown * = 07AH;
port0JoyLeft * = 07CH;
port0JoyRight * = 07BH;
port1ButtonBlue * = 0172H;
port1ButtonRed * = 0178H;
port1ButtonYellow * = 0177H;
port1ButtonGreen * = 0176H;
port1ButtonForward * = 0175H;
port1ButtonReverse * = 0174H;
port1ButtonPlay * = 0173H;
port1JoyUp * = 0179H;
port1JoyDown * = 017AH;
port1JoyLeft * = 017CH;
port1JoyRight * = 017BH;
port2ButtonBlue * = 0272H;
port2ButtonRed * = 0278H;
port2ButtonYellow * = 0277H;
port2ButtonGreen * = 0276H;
port2ButtonForward * = 0275H;
port2ButtonReverse * = 0274H;
port2ButtonPlay * = 0273H;
port2JoyUp * = 0279H;
port2JoyDown * = 027AH;
port2JoyLeft * = 027CH;
port2JoyRight * = 027BH;
port3ButtonBlue * = 0372H;
port3ButtonRed * = 0378H;
port3ButtonYellow * = 0377H;
port3ButtonGreen * = 0376H;
port3ButtonForward * = 0375H;
port3ButtonReverse * = 0374H;
port3ButtonPlay * = 0373H;
port3JoyUp * = 0379H;
port3JoyDown * = 037AH;
port3JoyLeft * = 037CH;
port3JoyRight * = 037BH;
(*****************************************************************************)
(* Return values for GetLanguageSelection() *)
langUnknown * = 0;
american * = 1; (* American English *)
english * = 2; (* British English *)
german * = 3;
french * = 4;
spanish * = 5;
italian * = 6;
portuguese * = 7;
danish * = 8;
dutch * = 9;
norwegian * = 10;
finnish * = 11;
swedish * = 12;
japanese * = 13;
chinese * = 14;
arabic * = 15;
greek * = 16;
hebrew * = 17;
korean * = 18;
(*****************************************************************************)
TYPE
(* some dummys for type security *)
KBIntHandle * = UNTRACED POINTER TO STRUCT END;
TimerIntHandle * = UNTRACED POINTER TO STRUCT END;
VBlankIntHandle * = UNTRACED POINTER TO STRUCT END;
(* easy handling of GetKey() result *)
KeyDescription * = STRUCT
qualifier *: SET;
code *: INTEGER;
END;
(* $StackChk- $RangeChk- $NilChk- $OvflChk- $ReturnChk- $CaseChk- *)
VAR
base *: e.LibraryPtr;
(*--- functions in V40 or higher (Release 3.1) ---*)
(* CONTROLLER HANDLING *)
PROCEDURE ReadJoyPort *{base,-001EH}(port{0} : LONGINT): LONGSET;
(* LANGUAGE HANDLING *)
PROCEDURE GetLanguageSelection *{base,-0024H}() : SHORTINT;
(* KEYBOARD HANDLING *)
PROCEDURE GetKey *{base,-0030H}() : KeyDescription;
PROCEDURE QueryKeys *{base,-0036H}(queryArray{8} : KeyQueryPtr;
arraySize{1} : LONGINT);
PROCEDURE AddKBInt *{base,-003CH}(intRoutine{8} : e.PROC;
intData{9} : e.APTR): KBIntHandle;
PROCEDURE RemKBInt *{base,-0042H}(intHandle{9} : KBIntHandle);
(* SYSTEM HANDLING *)
PROCEDURE SystemControlA *{base,-0048H}(tagList{9} : ARRAY OF u.TagItem): u.TagID;
PROCEDURE SystemControl *{base,-0048H}(firstTag{9}.. : u.Tag): u.TagID;
(* TIMER HANDLING *)
PROCEDURE AddTimerInt *{base,-004EH}(intRoutine{8} : e.PROC;
intData{9} : e.APTR): TimerIntHandle;
PROCEDURE RemTimerInt *{base,-0054H}(intHandle{9} : TimerIntHandle);
PROCEDURE StopTimerInt *{base,-005AH}(intHandle{9} : TimerIntHandle);
PROCEDURE StartTimerInt *{base,-0060H}(intHandle{9} : TimerIntHandle;
timeInterval{0}: LONGINT;
continuous{1} : e.LONGBOOL);
PROCEDURE ElapsedTime *{base,-0066H}(VAR context{8}: Timer.EClockVal): LONGINT;
(* VBLANK HANDLING *)
PROCEDURE AddVBlankInt *{base,-006CH}(intRoutine{8} : e.PROC;
intData{9} : e.APTR): VBlankIntHandle;
PROCEDURE RemVBlankInt *{base,-0072H}(intHandle{9} : VBlankIntHandle);
(* MORE CONTROLLER HANDLING *)
PROCEDURE SetJoyPortAttrsA *{base,-0084H}(portNumber{0}: LONGINT;
tagList{9} : ARRAY OF u.TagItem): BOOLEAN;
PROCEDURE SetJoyPortAttrs *{base,-0084H}(portNumber{0}: LONGINT;
firstTag{9}..: u.Tag): BOOLEAN;
(* only a dummy to make sure SIZE(KeyDescriptor) = SIZE(LONGINT) *)
PROCEDURE CheckKeyDescriptorSize(kd: KeyDescription): LONGINT;
BEGIN RETURN SYSTEM.VAL(LONGINT,kd); END CheckKeyDescriptorSize;
BEGIN
base := e.OpenLibrary(lowlevelName,40);
CLOSE
IF base # NIL THEN e.CloseLibrary(base); END;
END LowLevel.